package com.neu.questionnaireplus.service;

import com.neu.questionnaireplus.entity.Tenement;
import com.neu.questionnaireplus.entity.User;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;

public interface UserService {

    User queryUserByUsername(String username);

    /**
     * @Description: 查询所有用户,包括已经删除的
     * @Param: []
     * @return: java.util.List<com.neu.questionnaireplus.entity.User>
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    List<User> queryUser();

    /**
     * @Description: 查询未被删除的用户
     * @Param: []
     * @return: java.util.List<com.neu.questionnaireplus.entity.User>
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/31
     */
    List<User> queryExistUser();
    /**
     * @Description: 查询租户下的所有用户
     * @Param: [belongTenement]
     * @return: java.util.List<com.neu.questionnaireplus.entity.User>
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/31
     */
    List<User> queryUserByTenement(String belongTenement);

    /**
     * @Description: 模糊查询用户
     * @Param: [user]
     * @return: java.util.List<com.neu.questionnaireplus.entity.User>
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    List<User> selectUserList(User user);

    /**
     * @Description: 根据id查询用户并返回
     * @Param: [id]
     * @return: com.neu.questionnaireplus.entity.User
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    User queryUserByID(String id);

    /**
     * @Description: 插入一个User进数据库
     * @Param: [user]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    boolean insertUser(User user);

    /**
     * @Description: 根据id更新用户
     * @Param: [user]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    boolean updateUser(User user);

    /**
     * @Description: 根据id删除用户
     * @Param: [id]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    boolean deleteUser(String id);

    /**
     * @Description: 根据电话查询用户对象
     * @Param: [telnumber]
     * @return: com.neu.questionnaireplus.entity.User
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    User queryUserByPhone( String telnumber);

    /**
     * @Description: 通过密码登录
     * @Param: [username, password]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    boolean loginByPassword( String username,  String password);

    /**
     * @Description: 通过用户名和回答验证密保
     * @Param: [username, answer]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    boolean checkSecurityQuestion( String username, String answer);

    /**
     * @Description: 查询是否具有数据关联
     * @Param: [id]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    boolean hasDataRelation( String id);

    /**
     * @Description: 通过用户的username模糊查询用户
     * @Param: [username]
     * @return: java.util.List<com.neu.questionnaireplus.entity.User>
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    List<User> queryUserByName( String username);

    /**
     * @Description: 根据id禁用用户
     * @Param: [id]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    boolean forbiddenUser( String id);

    /**
     * @Description: 根据id解禁用户
     * @Param: [id]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/30
     */
    boolean freeUser( String id);

    /**
     * @Description: 根据用户群组状态做为依据修改用户信息
     * @Param: [user]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/31
     */
    boolean modifyUserInfo(User user);

    /**
     * @Description:  根据用户群组状态做为依据逻辑删除用户信息
     * @Param: [user]
     * @return: boolean
     * @Author: ~FHX~ (:TSunS:)
     * @Date: 2022/10/31
     */
    boolean deleteUserInfo(User user);

    /**
    * @Description: 批量导入用户（文件格式：excel）
    * @Param: [tenement, file]
    * @return: java.util.List<com.neu.questionnaireplus.entity.User>
    * @Author: ~FHX~ (:TSunS:)
    * @Date: 2022/10/31
    */
    List<User> importFileToUsers(Tenement tenement, MultipartFile file);

    /**
    * @Description:  通过用户输入的inputStr验证码和真实验证码realStr进行比较，同时查询手机号是否存在，若存在且验证正确，登录放行
    * @Param: [phone, inputStr, realStr]
    * @return: boolean
    * @Author: ~FHX~ (:TSunS:)
    * @Date: 2022/11/2
    */
    boolean loginByPhone(String phone,String inputStr,String realStr);

    /**
    * @Description: 验证注册用户的验证码
     * @Param: [phone, inputStr, realStr]
    * @return: boolean
    * @Author: ~FHX~ (:TSunS:)
    * @Date: 2022/11/2
    */
    boolean checkRegisterStr(String phone,String inputStr,String realStr);

    /**
    * @Description: 验证重置密码的手机验证码
    * @Param: [phone, inputStr, realStr]
    * @return: boolean
    * @Author: ~FHX~ (:TSunS:)
    * @Date: 2022/11/2
    */
    boolean checkResetPwdStr(String phone,String inputStr,String realStr);
}
